home *** CD-ROM | disk | FTP | other *** search
/ C/C++ Users Group Library 1996 July / C-C++ Users Group Library July 1996.iso / listings / v_08_03 / 8n03020a < prev    next >
Text File  |  1990-03-18  |  2KB  |  85 lines

  1.  
  2. *****Listing 2*****
  3.  
  4.  
  5. #include <stdio.h>
  6. #include <stdlib.h>
  7.  
  8. void prochar(void *parg);
  9. void proint(void *parg);
  10. void prolong(void *parg);
  11. void prodouble(void *parg);
  12. void pronone(void *parg);
  13.  
  14. /* structure type flag values */
  15.  
  16. #define TYPENONE   0    /* Not pointing at an object */
  17. #define TYPECHAR   1    /* char */
  18. #define TYPEINT    2    /* int */
  19. #define TYPELONG   3    /* long */
  20. #define TYPEDOUBLE 4    /* double */
  21.  
  22. struct node {
  23.     struct node *pfwd;    /* forward ptr */
  24.     struct node *pbwd;    /* backward ptr */
  25.     void *pobject;        /* ptr to object */
  26.     unsigned int objtype;    /* indicate object type */
  27. };
  28.  
  29. main()
  30. {
  31.     char c = 'A';
  32.     int i = 10;
  33.     long int l = 123456;
  34.     double d = 123.45;
  35.     static void (*funtable[])(void *parg) = {
  36.         pronone, 
  37.         prochar, 
  38.         proint, 
  39.         prolong, 
  40.         prodouble
  41.     };
  42.     struct node *pnode;
  43.  
  44.     pnode = malloc(sizeof(struct node));
  45.  
  46. /* let's point to a double */
  47.  
  48.     pnode->pobject = &d;
  49.     pnode->objtype = TYPEDOUBLE;
  50.     pnode->pfwd = NULL;
  51.     pnode->pbwd = NULL;
  52.  
  53. /* at a later point, let's process the object to which we point */
  54.  
  55.     (*funtable[pnode->objtype])(pnode->pobject);
  56. }
  57.  
  58. /* processing functions */
  59.  
  60. void prochar(void *parg)
  61. {
  62.     printf("char: %c\n", *(char *)parg);
  63. }
  64.  
  65. void proint(void *parg)
  66. {
  67.      printf("int: %d\n", *(int *)parg);
  68. }
  69.  
  70. void prolong(void *parg)
  71. {
  72.     printf("long: %ld\n", *(long *)parg);
  73. }
  74.  
  75. void prodouble(void *parg)
  76. {
  77.     printf("double: %f\n", *(double *)parg);
  78. }
  79.  
  80. void pronone(void *parg)
  81. {
  82.     printf("none:\n");
  83. }
  84.  
  85.